<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    (function(){
        function obs(){
            this.obj = {}
            // 参数一是消息类型，是string类型
            // 参数二是用来接收消息的函数，是function类型
            this.on = function(type,handler){//订阅消息
                this.obj[type] = this.obj[type] || []
                this.obj[type].push(handler)
            }
            this.em = function(type,msg){//发布消息
                // if( this.obj[type] ){ //做个判断,防止this.obj[type]获取不到而报错.
                //     this.obj[type].forEach((item)=>{
                //         item(msg);
                //     })
                // }


                // 上面的if判断可以简化为 && 与表达式
                this.obj[type] &&
                this.obj[type].forEach((item)=>{ //遍历并调用每个回调函数
                    item(msg)
                })
            }
        }
        window.obs = obs
    })()
    // 实例化对象
    var os = new obs()
    // 订阅消息
    os.on('jing',function(msg){
        console.log('张三 收到了来自jing的消息: ' + msg);
    })
    os.on('jing',function(msg){
        console.log('李四 收到了来自jing的消息: ' + msg);
    })
    os.on('jing',function(msg){
        console.log('王五 收到了来自jing的消息: ' + msg);
    })
    os.on('qiang',function(msg){
        console.log('王五 收到了来自qiang的消息: ' + msg);
    })
    os.on('qiang',function(msg){
        console.log('王五 收到了来自qiang的消息: ' + msg);
    })
    os.em('jing','开心开心')
</script>